package com.by.log.entity;

import lombok.Data;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

/**
 * 统计数据实体，用于方法调用指标分析
 */
@Data
public class StatisticData {
    /** 统计维度（如：service、method、ip、route等） */
    private String dimension;

    /** 目标标识（如：order-service、createOrder、/api/order/create） */
    private String targetId;

    /** 标签键值对，用于扩展维度 */
    private Map<String, String> labels = new HashMap<>();

    /** 统计周期（分钟级） */
    private LocalDateTime period;

    /** 调用总量 */
    private long callCount;

    /** 成功次数 */
    private long successCount;

    /** 失败次数 */
    private long failCount;

    /** 总响应时间(ms) */
    private long totalResponseTime;

    /** 最大响应时间(ms) */
    private long maxResponseTime;

    /** 最小响应时间(ms) */
    private long minResponseTime;

    public void incrementCall(boolean success, long responseTime) {
        callCount++;
        if (success) {
            successCount++;
        } else {
            failCount++;
        }
        totalResponseTime += responseTime;
        maxResponseTime = Math.max(maxResponseTime, responseTime);
        minResponseTime = Math.min(minResponseTime, responseTime);
    }

    /**
     * 添加标签
     * @param key 标签键
     * @param value 标签值
     */
    public void addLabel(String key, String value) {
        this.labels.put(key, value);
    }

    /**
     * 获取标签值
     * @param key 标签键
     * @return 标签值
     */
    public String getLabel(String key) {
        return this.labels.get(key);
    }
}